# Python内建的filter()函数用于过滤序列
# 和map()类似，filter()也接收一个函数和一个序列
# 和map()不同的是，filter()把传入的函数依次作用于每个元素，
# 然后根据返回值是True还是False决定保留还是丢弃该元素。
def is_odd(n):
	return n % 2 ==1
print(list(filter(is_odd,[1,3,5,7,9,13])))

def not_empty(s):
	return s and s.strip()
print(list(filter(not_empty,['','a','b','z','','ab'])))

# 用filter求素数
# 构造一个从3开始的奇数序列
def _odd_iter():
	n =1
	while True:
		n = n +2
		yield n

# 定义一个筛选函数
def _not_divisable(n):
	return lambda x:x % n>0

# 定义一个生成器，不断返回下一个素数	
def primes():
	yield 2
	it = _odd_iter() #初始化序列
	while True:
		n = next(it) # 返回序列的第一个数
		yield n
		it = filter(_not_divisable(n),it) # 构造新序列

# 打印1000以内的素数:
for n in primes():
	if n <1000:
		print(n)
	else:
		break

# 打印1000以内的回数
def is_palindrome(n):
	n = str(n) #str函数将整型n转换成字符串
	return n == n[::-1]
output = filter(is_palindrome,range(1000,2000))
print(list(output))
